class fisher_vector
{
public:  
    inline fisher_vector(const string  in_single_path,
			 const string  in_multi_path,
			 const string  in_actionNames, 
			 const uword in_col, 
			 const uword in_row
			);
    
    
    
    //optical flow system
    inline void optflow_features_allpeople(field <string>  people);
    inline void optflow_features_testing(field <string>  people);
    inline void optflow_create_universal_gmm(field <string>  peo_train, int N_cent, int run);
    
    //Euclidean Distance Transform System
    inline void edt_features_allpeople(field <string>  people, string single_path_mask);
    inline void edt_features_testing(field <string>  people, string multi_path_mask );
    inline void edt_create_universal_gmm(field <string>  peo_train, int N_cent, int run, bool is_pca);

    
    //mask + optical flow system
    inline void mask_optflow_features_allpeople(field <string>  people, string single_path_mask); 
    inline void mask_optflow_features_testing( field <string>  people, string multi_path_mask);
    inline void mask_optflow_create_universal_gmm(field <string>  peo_train, int N_cent, int run);

    

private:
  const string  single_path;
  const string  multi_path;
  const string  actionNames;
  const uword col;
  const uword row;
  
  int dim;
  int N_data;
  int N_cent;
  mat mat_features;
  field<string> actions;
  
  mat means;
  mat covs;
  vec weights;	 
  

 
  
};